/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/* 
 * File:   KKSIndex.h
 * Author: ever
 *
 * Created on 2018年5月10日, 上午11:12
 */

#ifndef KKSINDEX_H
#define KKSINDEX_H

#include <TL_Common.h>
#include <TL_Exp.h>
#include <map>
#include <string>
#include <fstream>

/**
 每个出现的kks，都给定一个唯一的编号
 */



typedef unsigned int u32_t;
using namespace tidp;

class KKSIndex {
public:
    KKSIndex() = default;

    KKSIndex(const string &index_file);

    KKSIndex(const KKSIndex &orig) = delete;

    virtual ~KKSIndex();

    void attach(const string &index_file);

    /**
     * 获得kks对应的id
     * @param kks
     * @return 0-kks不存在
     */
    u32_t getKKSId(const string &kks);

    /**
     * 添加kks
     * @param kks
     * @return 返回对应的id
     */
    u32_t addKKS(const string &kks);

    /**
     * 通过id找到kks
     * @param id 
     * @return 如果未找到，则返回一个empty string
     */
    const string &getKKS(u32_t id);

    void save();

    bool empty() const {
        return _id_kks.empty();
    }

    size_t size() const {
        return _id_kks.size();
    }

private:
    bool _need_save = false;
    string _save_file{"/tmp/kks.idx"};
    map<string, u32_t> _kks_id;
    map<u32_t, const string *> _id_kks;
};

#endif /* KKSINDEX_H */

